package com.iot.ammeter.service.web.user;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.iot.ammeter.dto.web.login.LoginAndRegisterDTO;
import com.iot.ammeter.dto.web.user.PasswordDTO;
import com.iot.ammeter.dto.web.user.WebUserDetailDTO;
import com.iot.ammeter.dto.web.user.WebUserRoleDTO;
import com.iot.ammeter.entity.web.user.WebUser;
import com.baomidou.mybatisplus.extension.service.IService;
import com.iot.ammeter.query.web.user.WebUserQuery;

import java.util.Map;

/**
 * <p>
 * web端用户表 服务类
 * </p>
 *
 * @author basil
 * @since 2021-09-25
 */
public interface WebUserService extends IService<WebUser> {

    /**
     * web端用户注册
     *
     * @param registerDTO 注册email及密码
     * @return 注册成功或者失败
     */
    String webUserRegister(LoginAndRegisterDTO registerDTO);

    /**
     * web端用户登录
     *
     * @param loginDTO 登录email及密码
     * @return 返回令牌、角色id等信息
     */
    Map<String, Object> webUserLogin(LoginAndRegisterDTO loginDTO);

    /**
     * 修改web端用户密码
     *
     * @param passwordDto 新旧密码
     * @return 修改密码成功或者失败
     */
    String changeWebUserPassword(PasswordDTO passwordDto);

    /**
     * 重置web端用户密码
     *
     * @param passwordDto 邮箱及新密码
     * @return 重置web端用户密码成功或者失败提示
     */
    String resetWebUserPassword(PasswordDTO passwordDto);

    /**
     * 判断邮箱是否已被注册
     *
     * @param email 邮箱号
     * @return 返回邮箱是否已经存在
     */
    String emailIsExists(String email);

    /**
     * 获取web端用户详细信息
     *
     * @param webUserId web端用户id
     * @return web端用户详细信息
     */
    WebUserDetailDTO getWebUserDetailByWebUserId(String webUserId);

    /**
     * 获取web端用户列表
     *
     * @param page         请求页码
     * @param pageSize     每页数量
     * @param webUserQuery 查询条件
     * @return web端用户列表
     */
    IPage<WebUserDetailDTO> getWebUserList(int page, int pageSize, WebUserQuery webUserQuery);

    /**
     * 添加web端用户
     *
     * @param webUserDTO 用户信息
     * @return 添加成功或者失败提示
     */
    String addWebUser(WebUserDetailDTO webUserDTO);

    /**
     * 更新用户信息
     *
     * @param webUserDTO 要修改的信息
     * @return 操作结果详情
     */
    boolean updateWebUser(WebUserDetailDTO webUserDTO);

    /**
     * 修改用户角色信息
     *
     * @param webUserRole 用户id
     */
    boolean updateWebUserRole(WebUserRoleDTO webUserRole);
}
